// Popup 脚本 - 处理配置导入导出
(function() {
    'use strict';
    
    const exportBtn = document.getElementById('export-btn');
    const importBtn = document.getElementById('import-btn');
    const importFile = document.getElementById('import-file');
    const statusDiv = document.getElementById('status');
    const configInfo = document.getElementById('config-info');
    const configStats = document.getElementById('config-stats');
    
    // 显示状态消息
    function showStatus(message, type = 'info') {
        statusDiv.textContent = message;
        statusDiv.className = `status ${type}`;
        setTimeout(() => {
            statusDiv.className = 'status';
            statusDiv.textContent = '';
        }, 5000);
    }
    
    // 加载配置统计信息
    function loadConfigStats() {
        chrome.storage.local.get(['oaConfig'], function(result) {
            let config = result.oaConfig;
            
            if (!config) {
                chrome.storage.sync.get(['oaConfig'], function(syncResult) {
                    config = syncResult.oaConfig;
                    displayConfigStats(config);
                });
            } else {
                displayConfigStats(config);
            }
        });
    }
    
    // 显示配置统计
    function displayConfigStats(config) {
        if (!config || !config.forms) {
            configInfo.style.display = 'none';
            return;
        }
        
        const forms = config.forms;
        const formCount = Object.keys(forms).length;
        
        if (formCount === 0) {
            configInfo.style.display = 'none';
            return;
        }
        
        configInfo.style.display = 'block';
        configStats.innerHTML = `已保存 ${formCount} 个表单的配置`;
    }
    
    // 导出配置
    exportBtn.addEventListener('click', function() {
        chrome.storage.local.get(['oaConfig'], function(result) {
            let configToExport = result.oaConfig;
            
            // 如果 local 中没有，尝试从 sync 读取
            if (!configToExport) {
                chrome.storage.sync.get(['oaConfig'], function(syncResult) {
                    configToExport = syncResult.oaConfig || {forms: {}};
                    downloadConfig(configToExport);
                });
            } else {
                downloadConfig(configToExport);
            }
        });
    });
    
    // 下载配置文件
    function downloadConfig(configData) {
        try {
            const formCount = Object.keys(configData.forms || {}).length;
            
            if (formCount === 0) {
                showStatus('当前没有配置可导出', 'info');
                return;
            }
            
            const jsonStr = JSON.stringify(configData, null, 2);
            const blob = new Blob([jsonStr], { type: 'application/json' });
            const url = URL.createObjectURL(blob);
            const a = document.createElement('a');
            a.href = url;
            a.download = `oa-extension-config-${new Date().toISOString().split('T')[0]}.json`;
            document.body.appendChild(a);
            a.click();
            document.body.removeChild(a);
            URL.revokeObjectURL(url);
            
            showStatus(`配置已导出！已保存 ${formCount} 个表单的配置`, 'success');
        } catch (error) {
            showStatus('导出配置失败：' + error.message, 'error');
            console.error('导出配置错误:', error);
        }
    }
    
    // 导入配置
    importBtn.addEventListener('click', function() {
        importFile.click();
    });
    
    importFile.addEventListener('change', function(e) {
        const file = e.target.files[0];
        if (!file) {
            return;
        }
        
        const reader = new FileReader();
        reader.onload = function(e) {
            try {
                const configData = JSON.parse(e.target.result);
                
                // 验证配置格式
                if (!configData || typeof configData !== 'object') {
                    throw new Error('配置文件格式错误：根对象必须是对象');
                }
                
                // 检查是否有 forms 字段
                if (!configData.forms || typeof configData.forms !== 'object') {
                    throw new Error('配置文件格式错误：缺少 forms 字段');
                }
                
                // 合并配置到现有配置
                chrome.storage.local.get(['oaConfig'], function(result) {
                    const existingConfig = result.oaConfig || {forms: {}};
                    const mergedConfig = {
                        ...existingConfig,
                        forms: {
                            ...(existingConfig.forms || {}),
                            ...(configData.forms || {})
                        }
                    };
                    
                    // 同时保存到 local 和 sync
                    chrome.storage.local.set({oaConfig: mergedConfig}, function() {
                        chrome.storage.sync.set({oaConfig: mergedConfig}, function() {
                            const formCount = Object.keys(mergedConfig.forms || {}).length;
                            showStatus(`配置导入成功！已导入 ${formCount} 个表单的配置`, 'success');
                            
                            // 刷新统计信息
                            setTimeout(() => {
                                loadConfigStats();
                            }, 500);
                            
                            // 通知 content script 重新加载配置
                            chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
                                if (tabs[0]) {
                                    chrome.tabs.sendMessage(tabs[0].id, {action: 'reloadConfig'}, function(response) {
                                        // 忽略错误（可能页面没有 content script）
                                    });
                                }
                            });
                        });
                    });
                });
            } catch (error) {
                showStatus('导入配置失败：' + error.message, 'error');
                console.error('导入配置错误:', error);
            }
            
            // 清空文件选择，允许再次选择同一文件
            importFile.value = '';
        };
        
        reader.onerror = function() {
            showStatus('读取文件失败', 'error');
            importFile.value = '';
        };
        
        reader.readAsText(file);
    });
    
    // 页面加载时显示配置统计
    loadConfigStats();
})();

